package com.itcam.socket_;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Author:Cammy.Wu
 * Date:2024-05-15
 * Description:加入完整的处理异常方式————服务器
 */

public class ServerDemo04 {
    public static void main(String[] args) {
        // 1.创建套接字：指定服务器的端口号
        ServerSocket serverSocket = null;
        Socket socket = null; // 阻塞方法：等待接受客户端的数据，什么时候接收到数据，什么时候程序继续向下执行
        InputStream inputStream = null;
        ObjectInputStream objectInputStream = null;
        OutputStream outputStream = null;
        DataOutputStream dataOutputStream = null;
        try {
            serverSocket = new ServerSocket(8888);
            // 2.等待客户端发来的信息
            socket = serverSocket.accept();
            // accpet()返回一个Socket，这个Socket其实就是客户端的Socket
            // 接收到这个Socket以后，客户端和服务器才真正产生了链接，才真正可以通信了
            // 3.接收到的操作流
            inputStream = socket.getInputStream();
//        DataInputStream dataInputStream = new DataInputStream(inputStream);
            objectInputStream = new ObjectInputStream(inputStream);

            // 4.读取客户端发来的数据
//        String str = dataInputStream.readUTF();
            User user = (User) objectInputStream.readObject();
//        System.out.println("客户端发来的数据为：" + str);

            // 对对象进行验证
            boolean flag = false;
            if (user.getName().equals("cammy") && user.getPwd().equals("158633115")) {
                flag = true;
            }

            // 向客户端输出一句话 --》 操作流 --》输出流
            outputStream = socket.getOutputStream();
            dataOutputStream = new DataOutputStream(outputStream);
//        dataOutputStream.writeUTF("你好，我是服务器，我接收到了你的请求");
            dataOutputStream.writeBoolean(flag);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            // 5.关闭流
//        dataInputStream.close();
            try {
                if (dataOutputStream != null) {
                    dataOutputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                if (outputStream != null) {
                    outputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                if (objectInputStream != null) {
                    objectInputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                if (inputStream != null) {
                    inputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                if (socket != null) {
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                if (serverSocket != null) {
                    serverSocket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }
}
